﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using CF.Entidades;
 

namespace CF.DAO
{
    public class MovimentoDAO :  CF.Interfaces.ICrude<CF.Entidades.Movimento,int>
    {
        #region ICrude<Movimento,int> Members

        private const string conexao = "Data Source=.;Initial Catalog=ControleFinanceiro;Integrated Security=True";


        public List<CF.Entidades.Movimento> SelecionarTudo()
        {
            SqlConnection conn = new SqlConnection(conexao);
            try
            {
                conn.Open();
                List<CF.Entidades.Movimento> colecao = new List<CF.Entidades.Movimento>();
                string query = "SELECT [Id] ,[Descricao] FROM [Movimento]";
                SqlCommand cmd = new SqlCommand(query, conn);
                SqlDataReader leitor = cmd.ExecuteReader();
                while (leitor.Read())
                {
                    Movimento obj = new Movimento();
                    obj.Id = leitor.GetInt32(0);
                    obj.Nome = leitor.GetString(1);
                    colecao.Add(obj);
                }
                return colecao;

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conn.Close();
            }
        }

        public CF.Entidades.Movimento Selecionar(int id)
        {
            SqlConnection conn = new SqlConnection(conexao);
            try
            {
                conn.Open();
                string query = "SELECT [Id] ,[Descricao] FROM [Movimento] WHERE [Id] = @identificador";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.Parameters.Add(new SqlParameter("@identificador", id));

                SqlDataReader leitor = cmd.ExecuteReader();
                if  (leitor.Read())
                {
                    Movimento obj = new Movimento();
                    obj.Id = leitor.GetInt32(0);
                    obj.Nome = leitor.GetString(1);
                    return obj; 
                    
                }
                throw new Exception("Nao existe Movimento com este ID: " + id.ToString());
                

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conn.Close();
            }
        }

        public int Incluir(CF.Entidades.Movimento obj)
        {
            SqlConnection conn = new SqlConnection(conexao);
            try
            {
                
                conn.Open();
                string query = "INSERT INTO [Movimento] ([Descricao]) VALUES (@descricao); select @@IDENTITY;";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.Parameters.Add(new SqlParameter("@descricao", obj.Nome));
                return (int)cmd.ExecuteScalar();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conn.Close();
            }
        }

        public void Excluir(int id)
        {
            SqlConnection conn = new SqlConnection(conexao);
            try
            {
                conn.Open();
                string query = "DELETE FROM [Movimento] WHERE Id = @identificador";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.Parameters.Add(new SqlParameter("@identificador", id));
                int i = cmd.ExecuteNonQuery();

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conn.Close();
            }
        }

        public void Alterar(CF.Entidades.Movimento obj)
        {
            SqlConnection conn = new SqlConnection(conexao);
            try
            {
                conn.Open();
                string query = "UPDATE [Movimento] SET [Descricao] = @Descricao WHERE Id = @identificador";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.Parameters.Add(new SqlParameter("@descricao", obj.Nome));
                cmd.Parameters.Add(new SqlParameter("@identificador", obj.Id));
                int i = cmd.ExecuteNonQuery(); 
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conn.Close();
            }
        }

        #endregion
    }
}
